package players;


import game.Game;

import java.util.LinkedList;
import java.util.List;

import cartes.Carte;



public abstract class Player {


	String name;
	List<Carte> cartesEnMain = new LinkedList<Carte>();
	boolean peutJouer = true;
	boolean gagne = false;

	public abstract boolean play();
	public abstract void casElement();

	public boolean isGagne() {
		return gagne;
	}

	public String getName() {
		return name;
	}



	public List<Carte> getCartesEnMain() {
		return cartesEnMain;
	}
	public boolean pioche (Carte carte) {
		if (cartesEnMain.size() < Game.NB_CARTES_MAX) {
			cartesEnMain.add(carte);
			return true;
		}
		return false;
	}

	public void afficherMain() {
		int i = 1;
		for(Carte carte : cartesEnMain) {
			System.out.println("{" + (i++) + "} - " + carte.print());
		}
	}



	public boolean depose(Carte carte) {
		List<Carte> listeCartes = canPlay();
		if (carte != null && listeCartes.contains(carte)) {
			Game.getInstance().depose(carte);
			cartesEnMain.remove(carte);
			return true;
		}
		return false;
	}


	public List<Carte> canPlay() {

		List<Carte> cartesPossibles = new LinkedList<Carte>();

		for (Carte carte : cartesEnMain) {
			boolean canPose = carte.canPose();
			if (canPose)
				cartesPossibles.add(carte);
		}

		// VERIFIE SI LE JOUEUR PEUT JOUER
		if (cartesPossibles.size() == 0 && cartesEnMain.size() == Game.NB_CARTES_MAX) {
			this.peutJouer = false;
		}
		else {
			this.peutJouer = true;
		}
		return cartesPossibles;
	}
}

